iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Software Development

C# 學習之路系列 第 15

[DAY14] C#基礎與實作(簡易-檔案處理)

  • 分享至 

  • xImage
  •  

C# 程式基礎

簡易-檔案處理:

在 C# 中,檔案處理需引入`using System.IO`

讀取檔案:

  • 程式範例:
    string filePath = "C:\\example.txt";
    
    try
    {
        // 使用 StreamReader 來讀取文本檔案
        using (StreamReader sr = new StreamReader(filePath))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                Console.WriteLine(line);
            }
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("讀取檔案時出錯:" + e.Message);
    }
    

  https://ithelp.ithome.com.tw/upload/images/20230927/201632179x4oqVflA8.png

寫入檔案:

  • StreamWriter(string path, bool append)

  • 用法:
    指定要寫入的檔案路徑以及是否應該附加到現有檔案而不是覆蓋它。

    • path: 要寫入的檔案的路徑,包括檔案名稱。
    • append:true,表示附加到現有的檔案。false,表示覆蓋現有的檔案。
  • 程式範例(附加寫入):

    string filePath = "C:\\example.txt";
    
    try
    {
        // 使用 StreamWriter 來寫入文本檔案
        using (StreamWriter sw = new StreamWriter(filePath, true))
        {
            sw.WriteLine("這是第一行。");
            sw.WriteLine("這是第二行。");
        }
    }
    catch (Exception e)
    {
        Console.WriteLine("寫入檔案時出錯:" + e.Message);
    }
    

  https://ithelp.ithome.com.tw/upload/images/20230927/20163217ijltEHGd0W.png

  • 程式範例(覆寫):
        // 使用 StreamWriter 來寫入文本檔案
        using (StreamWriter sw = new StreamWriter(filePath))
        {
            sw.WriteLine("這是第一行。");
            sw.WriteLine("這是第二行。");
        }
    

  https://ithelp.ithome.com.tw/upload/images/20230927/20163217krAlQLdgT6.png

檢查檔案是否存在:

  • 程式範例:
    using System;
    using System.IO;
    
    string filePath = "C:\\example.txt";
    
    if (File.Exists(filePath))
    {
        Console.WriteLine("檔案存在。");
    }
    else
    {
        Console.WriteLine("檔案不存在。");
    }
    

  https://ithelp.ithome.com.tw/upload/images/20230927/20163217ZEYH9U6JCj.png

創建資料夾(目錄):

  • 程式範例:
    string directoryPath = "C:\\myTest_directory";
    
    // 創建資料夾(目錄)
    Directory.CreateDirectory(directoryPath);
    

  https://ithelp.ithome.com.tw/upload/images/20230927/20163217O4juFT2BnD.png

刪除目錄:

  • 程式範例:
    string directoryPath = "C:\\myTest_directory";
    
    // 刪除資料夾(目錄)及其內容
    Directory.Delete(directoryPath, true);
    // myTest_directory 資料夾被刪除
    

程式實作練習:

  • 題目:
      一個包含使用者姓名、電話、地址和電子郵件的 TXT 檔案(example.txt),我們需要將所有使用者的電子郵件地址寫入新的 TXT 檔案(emails.txt)內,並請使用正規表達式協助處理,最後在結束時請告知「已成功提取並寫入電子郵件地址到 emails.txt 檔案。」

  • 範例 TXT 檔案(example.txt)

    Allen
    0963-123-456
    123 Main St, City
    Allen@yahoo.com
    
    Bob
    0972-123-456
    456 Elm St, Town
    Bob@gmail.com
    
    Eric
    0988-123-456
    789 Oak St, Village
    Eric@msn.com
    
  • 程式實作:

    string inputFilePath = "C:\\example.txt"; // 輸入檔案
    string outputFilePath = "D:\\emails.txt"; // 輸出檔案
    
    try
    {
        // 建立一個正規表達式來匹配電子郵件地址
        string emailPattern = @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}";
    
        // 建立一個List來儲存匹配的電子郵件地址
        List<string> matchedEmails = new List<string>();
    
        // 使用 StreamReader 來讀取範例檔案
        using (StreamReader sr = new StreamReader(inputFilePath))
        {
            string line;
            while ((line = sr.ReadLine()) != null)
            {
                // 使用正規表達式匹配電子郵件地址
                MatchCollection matches = Regex.Matches(line, emailPattern);
                foreach (Match match in matches)
                {
                    matchedEmails.Add(match.Value);
                }
            }
        }
    
        // 將匹配的電子郵件地址寫入新的檔案
        using (StreamWriter sw = new StreamWriter(outputFilePath))
        {
            foreach (string email in matchedEmails)
            {
                sw.WriteLine(email);
            }
        }
    
        Console.WriteLine("已成功提取並寫入電子郵件地址到 emails.txt 檔案。");
    }
    catch (Exception e)
    {
        Console.WriteLine("處理檔案時出錯:" + e.Message);
    }
    

  https://ithelp.ithome.com.tw/upload/images/20230927/20163217kt9kS2MDM4.png

參考來源

  1. ChatGPT
  2. C#最強入門邁向頂尖高手之路王者歸來
  3. w3schools C#
  4. microsoft 利用 Visual C# 讀取及寫入文字檔
  5. microsoft StreamWriter 類別

期望挑戰30天持續更新成功 ~ DAY14


上一篇
[DAY13] C#基礎與實作(正規表達式)
下一篇
[DAY15] C#基礎與實作(進階-檔案處理)
系列文
C# 學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言